grep命令中文手册(info grep翻译)

您所在的位置:网站首页 land pattern翻译 grep命令中文手册(info grep翻译)

grep命令中文手册(info grep翻译)

2023-06-16 23:46| 来源: 网络整理| 查看: 265

1 Introduction

'grep'用于搜索给定文件中能匹配给定pattern列表的行。当某行能匹配上,(默认)将拷贝该行到标准输出,或者根据你所指定的选项生成其它序列的输出。

尽管'grep'所期望的是在文本行中做匹配,但即使某输入行的大小长度超出了可用内存空间也不会受到限制,它仍可以匹配一行中任意字符串。如果输入文件的最后一个字节不是换行符,'grep'会自动补上一个。由于换行符也是pattern列表的分隔符,因此没有任何办法匹配文本中的换行符。

2 Invoking 'grep'

'grep'命令行的一般语法格式为:

grep OPTIONS PATTERN INPUT_FILE_NAMES

OPTIONS部分可以指定0或多个。只有当没有使用"-e PATTERN"或"-f FILE"时,指定的PATTERN才被grep可视。可以指定0或多个INPUT_FILE_NAMES。

2.1 Command-line Options(命令行选项)

'grep'有大量选项可用:一些是POSIX.2中的,一些是GNU扩展的。长选项都是GNU扩展选项,即使它们来自于POSIX。由POSIX指定的短选项,被明确标注为便于POSIX可移植性编程。有少数几个选项是为了兼容古老版本的grep。 有几个额外的选项用于控制使用哪种变体'grep'匹配引擎(注:fgrep/grep/egrep)。

2.1.1 Generic Program Information

'--help' 输出简短的grep命令行使用帮助并退出。

'-V''--version' 输出'grep'的版本号。

2.1.2 Matching Control(控制匹配模式)

'-e PATTERN''--regexp=PATTERN' 明确指定使用此处的PATTERN作为待匹配的pattern。该选项可以指定多次,它可以保护以"-"开头的pattern。('-e'是POSIX指定的选项。)

'-f FILE''--file=FILE' 从FILE中获取pattern列表,每行一个pattern。空的FILE表示不给定任何pattern,所以不会匹配到任何内容。('-f'是POSIX指定的选项。)

'-i''-y''--ignore-case' 忽略PATTERN中的大小写,也忽略输入文件中的大小写区别。'-y'是废弃的用于和老版本保持兼容性的选项。('-i'是POSIX指定的选项。)

'-v''--invert-match' 反转匹配的结果,即选择那些未匹配到的行。('-v'是POSIX指定的选项。)

'-w''--word-regexp' 仅选择能精确匹配整个单词的行。单词的组成字符包括:字母、数字和下划线。除了这些字符,其余都是该选项筛选单词时的单词边界分隔符。 (注:例如字符串"fstab fstab(5)",grep -w 'fstab'或grep -w 'fsta.'能匹配这两个单词,但grep -w 'fsta'无法匹配任意一个)

'-x''--line-regexp' 仅选择能精确匹配整行内容的行。('-x'是POSIX指定的选项。) (注:例如某行"abcde",grep -x 'abc'将无法匹配该行,而grep -x 'abcd.'能匹配该行)

2.1.3 General Output Control(控制输出内容)

'-c''--count' 不再输出匹配的内容,而是输出匹配到的行数量。如果给定了"-v"选项,则输出未匹配到的行数量。('-c'是POSIX指定的选项。)

'--color[=WHEN]''--colour[=WHEN]' 对匹配到的内容赋予颜色并输出。WHEN的有效值包括:'never'、'always'或'auto'。

'-L''--files-without-match' 不再输出匹配的内容,而是输出未能被匹配到的文件名,当某文件中的某行被匹配到,将不再继续向下搜索该文件。 (注:和"-l"输出的文件名相反)

'-l''--files-with-matches' 不再输出匹配的内容,而是输出能被匹配到的文件名,当某文件中的某行被匹配到,将不再继续向下搜索该文件。('-l'是POSIX指定的选项。)

'-m NUM''--max-count=NUM' 当匹配成功的行有NUM行时,停止读取文件。如果是普通文件作为标准输入,则输出这匹配到的NUM行。grep会在最后一次匹配行后做位置标记,使得调用的另一个进程可以从此处恢复并继续向下搜索。例如,下面的shell脚本:

1 2 3 4 while grep -m 1 PATTERN do echo xxxx done < FILE

而下面的shell脚本则以不同于上面脚本方式运行,因为此处使用的是管道,这不是一个实体文件:

1 2 3 4 5 cat FILE | while grep -m 1 PATTERN do echo xxxx done

(注:如果对这两个脚本有疑问,可参考while循环中的陷阱,该文章中解释了管道和文件直接重定向时的区别)

'-o''--only-matching' 输出被匹配到的字符串,而不是输出整行。每个被匹配到的字符串都使用单独的行输出。

'-q''--quiet''--silent' 静默模式,立即退出,即使遇到了错误。不写任何内容到标准输出。如果匹配到了内容则退出状态码为0。('-q'是POSIX指定的选项。)

'-s''--no-messages' 禁止输出因文件不存在或文件没有读权限而产生的错误信息。('-s'是POSIX指定的选项。)

(注:由于POSIX和GNU grep的差异性,在可移植性的脚本中,应尽量避免使用"-q"和"-s",而是使用重定向的方式重定向到/dev/null)

2.1.4 Output Line Prefix Control(控制输出行的前缀)

当输出行有前缀要输出时,它们的顺序总是:文件名、行号、字节的偏移量,这个顺序不会因为前缀控制选项的顺序而改变。

'-b''--byte-offset' Print the 0-based byte offset within the input file before each line of output. If '-o' ('--only-matching') is specified, print the offset of the matching part itself. When 'grep' runs on MS-DOS or MS-Windows, the printed byte offsets depend on whether the '-u' ('--unix-byte-offsets') option is used; see below.

'-H''--with-filename' 输出匹配到内容所在文件的文件名。当指定了多个输入文件时,这是默认的。

'-h''--no-filename' 禁止输出文件名。当只有一个输入文件时,这是默认的。

'--label=LABEL' Display input actually coming from standard input as input coming from file LABEL. This is especially useful when implementing tools like 'zgrep'; e.g.:

gzip -cd foo.gz | grep --label=foo -H something

'-n''--line-number' 输出匹配内容在文件中的行号,每个文件都单独从1开始计数。('-n'是POSIX指定的选项。)

'-T''--initial-tab' Make sure that the first character of actual line content lies on a tab stop, so that the alignment of tabs looks normal. This is useful with options that prefix their output to the actual content:'-H', '-n', and '-b'. In order to improve the probability that lines from a single file will all start at the same column, this also causes the line number and byte offset (if present) to be printed in a minimum-size field width.

'-u''--unix-byte-offsets' Report Unix-style byte offsets. This option causes 'grep' to report byte offsets as if the file were a Unix-style text file, i.e., the byte offsets ignore the 'CR' characters that were stripped. This will produce results identical to running 'grep' on a Unix machine. This option has no effect unless the '-b' option is also used; it has no effect on platforms other than MS-DOS and MS-Windows.

'-Z''--null' 在输出文件名时,使用"\0"放在文件名后,这会替换原本使用的字符,如换行符或冒号。例如"grep -lZ"输出的每个文件都在同一行而不是分行,"grep -HZ"使得文件名后没有冒号。

2.1.5 Context Line Control(控制输出行的上下文)

无论下面的选项如何设置,grep都不会多次输出同一行。如果指定了"-o"选项,这些选项将失效,并给出一个警告。

'-A NUM''--after-context=NUM' 除了输出匹配到的行,还输出匹配到内容的后NUM行。

'-B NUM''--before-context=NUM' 除了输出匹配到的行,还输出匹配到内容的前NUM行。

'-C NUM''-NUM''--context=NUM' 除了输出匹配到的行,还输出匹配到内容的前NUM行和后NUM行。

'--group-separator=STRING' 当使用'-A', '-B' or '-C'时,使用STRING替代默认的组分隔符。

(注:组分隔符表示匹配到的内容的上下文。例如"-A 2",在某行匹配到时,还将输出后两行,这是一个组。下一次匹配成功时,如果是在该组之后行匹配上的,则这两组中间默认使用"--"分隔)

'--no-group-separator' 当使用'-A', '-B' or '-C'时,不输出任何组分隔符,而是将不同组相邻输出。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3